Spring Cloud学习(二)
二、Ribbon
基于HTTP和TCP的负载均衡工具,实现客户端负载均衡。与服务端负载均衡不同的是,客户端负载均衡中,所有客户端节点维护着自己要访问的服务端清单,服务端清单来自注册中心。
基本使用
- 服务提供者启动多个服务实例,注册到一个或者多个关联的注册中心
- 消费者调用被@LoadBalanced注解过的RestTemplate
源码分析
- LoadBalancerClient(客户端负载均衡器)中应该包含的能力:
- choose:挑选对应服务的实例
- execute:执行请求
- reconstructURI:拼接URI
- LoadBalancerAutoConfiguration自动化配置类:
- 创建LoadBalancerInterceptor的Bean,用于拦截请求
- 创建RestTemplateCustomizer的Bean,用于给RestTemplate增加拦截器
- 维护一个被@LoadBalanced注解修饰的RestTemplate对象列表
- 负载均衡规则实现:
- RandomRule:随机选取
- RoundRobinRule: 使用了一个AtomicInteger实现线性轮询
- RetryRule: 具备重试机制
- ZoneAvoidanceRule:默认的负载均衡策略,两次过滤(先过滤清单,再轮询选择),先选取Zone,再使用Zone中指定的过滤器
三、Hystrix
当某个服务单元发生故障时,通过断路器故障监控,向调用方返回错误响应。
四、Feign
整合了Ribbon与Hystrix,并且提供了声明式的Web服务客户端定义方式。